home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wonky Flux Batch 2019 02
/
Wonky_Flux_Batch_2019-02.zip
/
Wonky Flux Batch 2019-02
/
057 - Algebra Workshop.dsk
/
FACTOR.bas
< prev
next >
Wrap
BASIC Source File
|
2019-02-17
|
13KB
|
349 lines
10 REM "FACTORING QUADRATIC
15 REM TRINOMIALS"
20 REM
25 REM Written by:
30 REM Dennis Driscoll
35 REM Public Schools
40 REM Natick, MA 01760
45 REM
50 REM Date:
55 REM August 1988
60 REM
65 REM Version 0.2
70 REM <CTRL-J>
1000 REM
1010 REM *** CONTROL MODULE ***
1020 REM
1030 GOSUB 10000: REM TITLE SCREEN
1040 GOSUB 22000: REM PROGRAM DESCRIPTION
1050 GOSUB 20000: REM INITIALIZE ARRAYS
1060 GOSUB 21000: REM INITIALIZE VARIABLES
1070 GOSUB 37000: REM COMPUTER OR USER GENERATED PROBLEM?
1080 GOSUB 23000: REM GET VALUES FOR A,B,C
1090 GOSUB 24000: REM PRINT TRINOMIAL
1100 GOSUB 25000: REM VERIFY TRINOMIAL
1110 GOSUB 26000: REM FIND COMMON INTEGRAL FACTOR
1120 GOSUB 27000: REM GET FACTOR PAIRS FOR 'C'
1130 GOSUB 28000: REM GET FACTOR PAIRS FOR 'A'
1140 GOSUB 33000: REM PRINT FACTOR PAIRS
1150 GOSUB 29000: REM FIND COMBINATION PRODUCING 'B'
1160 GOSUB 34000: REM USER SUPPLIED ANSWER
1170 GOSUB 30000: REM PRINT FACTORED FORM
1180 GOSUB 31000: REM DO AGAIN?
1190 GOTO 1060
1200 STOP :<CTRL-J>
10000 REM
10010 REM *** TITLE SCREEN ***
10020 REM
10030 HOME
10040 GOSUB 10190: REM ROW OF *
10050 FOR X = 1 TO 2: GOSUB 10200: NEXT X
10060 PRINT "*";: HTAB 15: PRINT "FACTORING";: HTAB 39: PRINT "*"
10070 FOR X = 1 TO 2: GOSUB 10200: NEXT X
10080 PRINT "*";: HTAB 15: PRINT "QUADRATIC";: HTAB 39: PRINT "*"
10090 FOR X = 1 TO 2: GOSUB 10200: NEXT X
10100 PRINT "*";: HTAB 15: PRINT "TRINOMIALS";: HTAB 39: PRINT "*"
10110 FOR X = 1 TO 4: GOSUB 10200: NEXT X
10120 PRINT "*";: HTAB 12: PRINT "Dennis Driscoll";: HTAB 39: PRINT "*"
10130 GOSUB 10200
10140 PRINT "*";: HTAB 9: PRINT "Natick Public Schools";: HTAB 39: PRINT "*"
10150 FOR X = 1 TO 2: GOSUB 10200: NEXT X
10160 PRINT "*";: HTAB 5: PRINT "(Dedicated to my friend Julie.)";: HTAB 39: PRINT "*"
10170 GOSUB 10190
10180 GOSUB 32000: RETURN
10190 FOR X = 1 TO 39: PRINT "*";: NEXT X: PRINT : RETURN
10200 PRINT "*";: HTAB 39: PRINT "*": RETURN
10210 REM :<CTRL-J>
20000 REM
20010 REM *** DIMENSION ARRAYS ***
20020 REM
20030 DIM A1(50),A2(50),C1(50),C2(50)
20040 RETURN :<CTRL-J>
21000 REM
21010 REM *** INITIALIZE VARIABLES ***
21020 REM
21030 K = 0:L = 0:F1 = 0:F2 = 0:F3 = 0:F4 = 0:A = 0:B = 0:C = 0
21040 PR$ = ""
21050 F$ = "FACTORABLE"
21060 DT$ = "NEW"
21070 GCD = 1
21080 RETURN :<CTRL-J>
22000 REM
22010 REM *** PROGRAM DESCRIPTION ***
22020 REM
22030 HOME
22040 PRINT "This program will factor quadratic"
22050 PRINT : PRINT "trinomials of the form:"
22060 PRINT
22070 HTAB 15: PRINT "2"
22080 HTAB 13: PRINT "Ax + Bx + C"
22090 PRINT : PRINT "The program allows the trinomial to be "
22100 PRINT : PRINT "input by the user or generated by the"
22110 PRINT : PRINT "computer. It begins the factoring"
22120 PRINT : PRINT "process by working with the user to"
22130 PRINT : PRINT "identify and factor out any common"
22140 PRINT : PRINT "factor."
22150 GOSUB 32000
22160 HOME
22170 PRINT : PRINT "The program continues by listing factor"
22180 PRINT : PRINT "pairs for the coefficient of the "
22190 PRINT : PRINT "quadratic term and the constant term."
22200 PRINT : PRINT "The user may then attempt to factor"
22210 PRINT : PRINT "the remaining trinomial or have the"
22220 PRINT : PRINT "computer print the result."
22230 GOSUB 32000
22240 RETURN :<CTRL-J>
23000 REM
23010 REM *** GET VALUES FOR A,B,C ***
23020 REM
23030 IF PR$ = "2" THEN 23170
23040 REM
23050 REM User Generated Problem
23060 HOME
23070 HTAB 15: PRINT "2"
23080 HTAB 13: PRINT "Ax + Bx + C"
23090 PRINT : PRINT
23100 PRINT "Please input the values for A, B, and C."
23110 PRINT
23120 INPUT "A? ";A
23130 INPUT "B? ";B
23140 INPUT "C? ";C
23150 GOTO 23230
23160 REM
23170 REM Computer Generated Problem
23180 REM
23190 IF DT$ = "OLD" THEN 23220: REM SAME DIFF LEVEL AS LAST PROB
23200 SR$ = "DL" + STR$(CH)
23210 READ D$: IF D$ < >SR$ THEN 23210
23220 READ A,B,C: IF A = 0 THEN RESTORE :DT$ = "NEW": GOTO 23210
23230 RETURN :<CTRL-J>
24000 REM
24010 REM *** PRINT TRINOMIAL ***
24020 REM
24030 PRINT : PRINT
24040 IF GCD < >1 AND A = 1 THEN HTAB LEN( STR$(GCD)) +3: PRINT 2
24050 IF GCD = 1 AND A = 1 THEN HTAB 2: PRINT 2
24060 IF GCD < >1 AND A < >1 THEN HTAB LEN( STR$(GCD)) + LEN( STR$(A)) +3: PRINT 2
24070 IF GCD = 1 AND A < >1 THEN HTAB LEN( STR$(A)) +2: PRINT 2
24080 IF GCD < >1 THEN PRINT GCD;"(";
24090 IF A < >1 THEN PRINT A;
24100 PRINT "x ";
24110 IF SGN(B) = -1 THEN PRINT "- ";
24120 IF SGN(B) < > -1 THEN PRINT "+ ";
24130 PRINT ABS(B);"x ";
24140 IF SGN(C) = -1 THEN PRINT "- ";
24150 IF SGN(C) < > -1 THEN PRINT "+ ";
24160 PRINT ABS(C);
24170 IF GCD < >1 THEN PRINT ")";
24180 RETURN :<CTRL-J>
25000 REM
25010 REM *** VERIFY TRINOMIAL ***
25020 REM
25030 IF PR$ = "2" THEN 25100: REM computer generated prob
25040 PRINT : PRINT : PRINT "IS THIS CORRECT (Y/N)? ";
25050 GET ANS$: GOSUB 35000:S$ = ANS$
25060 IF S$ = "N" OR S$ = "n" THEN RUN 1060
25070 IF S$ = "Y" OR S$ = "y" THEN 25100
25080 PRINT "PLEASE ANSWER 'YES' OR 'NO'"
25090 GOTO 25040
25100 RETURN :<CTRL-J>
26000 REM
26010 REM *** CHECK FOR COMMON FACTOR ***
26020 REM
26030 HOME : PRINT : GOSUB 24000: REM PRINT TRINOMIAL
26040 A1 = A:B1 = B: GOSUB 36000: REM COMMON FACTOR FOR A,B
26050 A1 = C: GOSUB 36000: REM COMMON FACTOR FOR A,B,C
26060 GCD = B1
26070 IF SGN(A) < > SGN(GCD) THEN GCD = -GCD
26080 PRINT : PRINT : PRINT "Do the terms of this trinomial have a"
26090 PRINT : PRINT "common factor other than 1 (Y/N)? ";: GET ANS$: GOSUB 35000
26100 IF ANS$ = "Y" OR ANS$ = "y" THEN 26140
26110 IF ABS(GCD) = 1 THEN PRINT : PRINT "Correct!":GCD = 1: GOTO 26230
26120 PRINT : PRINT "Look again. The numbers ";A;", ";B: PRINT : PRINT "and ";C;" do have a common factor."
26130 GOTO 26170
26140 IF GCD < >1 THEN PRINT : PRINT "Correct!": GOTO 26170
26150 PRINT : PRINT "Look again. The numbers": PRINT : PRINT A;", ";B;" and ";C;" have": PRINT : PRINT "no common factor other than 1."
26160 GOTO 26230
26170 TR = 0
26180 PRINT : PRINT "What is the common factor";: INPUT CF
26190 TR = TR +1
26200 IF CF = GCD OR CF = -GCD THEN PRINT : PRINT "Correct!":GCD = CF: GOTO 26230
26210 IF TR >1 THEN PRINT : PRINT "No, the common factor is ";GCD;".": GOTO 26230
26220 PRINT : PRINT "That's not it. Try again.": GOTO 26180
26230 GOSUB 32000
26240 HOME : IF GCD = 1 THEN 26280
26250 PRINT "When we factor out the ";GCD
26260 PRINT : PRINT "the expression becomes"
26270 A = A/GCD:B = B/GCD:C = C/GCD: REM Reduce A,B,C
26280 GOSUB 24000: PRINT
26290 RETURN :<CTRL-J>
27000 REM
27010 REM *** GET FACTOR PAIRS OF C ***
27020 REM
27030 FOR X = 1 TO INT( SQR( ABS(C)))
27040 IF C/X = INT(C/X) THEN K = K +1:C1(K) = X:C2(K) = INT(C/X): IF C <0 OR (C >0 AND B <0) THEN K = K +1:C1(K) = -X:C2(K) = - INT(C/X)
27050 NEXT X
27060 RETURN :<CTRL-J>
28000 REM
28010 REM *** GET FACTOR PAIRS FOR 'A' ***
28020 REM
28030 FOR X = 1 TO INT( SQR( ABS(A)))
28040 IF A/X = INT(A/X) THEN L = L +1:A1(L) = X:A2(L) = INT(A/X): IF A <0 THEN L = L +1:A1(L) = -X:A2(L) = - INT(A/X)
28050 NEXT X
28060 RETURN :<CTRL-J>
29000 REM
29010 REM *** FIND PAIRS PRODUCING 'B' ***
29020 REM
29030 FOR X = 1 TO K
29040 FOR Y = 1 TO L
29050 IF A1(Y) *C1(X) +A2(Y) *C2(X) = B THEN F1 = A1(Y):F2 = C2(X):F3 = A2(Y):F4 = C1(X): GOTO 29110
29060 IF A1(Y) *C2(X) +A2(Y) *C1(X) = B THEN F1 = A1(Y):F2 = C1(X):F3 = A2(Y):F4 = C2(X): GOTO 29110
29070 NEXT Y
29080 NEXT X
29090 IF GCD = 1 THEN F$ = "PRIME"
29100 IF GCD < >1 THEN F$ = "IRREDUCIBLE"
29110 RETURN :<CTRL-J>
30000 REM
30010 REM *** PRINT FACTORED FORM ***
30020 REM
30030 PRINT : GOSUB 24000: PRINT " IS ";F$;".": IF F$ < >"FACTORABLE" THEN 30170
30040 PRINT : PRINT "THE FACTORED FORM IS:": PRINT
30050 IF GCD < >1 THEN PRINT GCD;
30060 PRINT "(";
30070 IF A = 1 THEN PRINT "x ";
30080 IF A < >1 THEN PRINT F1;"x ";
30090 IF F2 <0 THEN PRINT "- ";
30100 IF F2 > = 0 THEN PRINT "+ ";
30110 PRINT ABS(F2);")(";
30120 IF A = 1 THEN PRINT "x ";
30130 IF A < >1 THEN PRINT F3;"x ";
30140 IF F4 <0 THEN PRINT "- ";
30150 IF F4 > = 0 THEN PRINT "+ ";
30160 PRINT ABS(F4);")"
30170 RETURN :<CTRL-J>
31000 REM
31010 REM *** DO AGAIN? ***
31020 REM
31030 PRINT : PRINT
31040 PRINT "DO ANOTHER (Y/N)? ";: GET ANS$: GOSUB 35000
31050 IF ANS$ < >"N" AND ANS$ < >"n" THEN 31080
31060 D$ = CHR$(4)
31070 POKE 34,0: PRINT CHR$(4);"RUN MENU"
31080 RETURN :<CTRL-J>
32000 REM
32010 REM *** WAIT TO CONTINUE ***
32020 REM
32030 VTAB 23
32040 HTAB 7: PRINT "Press any key to continue.";: GET ANS$
32050 RETURN :<CTRL-J>
33000 REM
33010 REM *** PRINT FACTOR PAIRS ***
33020 REM
33030 PRINT : PRINT
33040 PRINT "Let's see if the trinomial can be": PRINT
33050 PRINT "factored. We must first find factor": PRINT : PRINT "pairs for ";A;" and ";C;"."
33060 GOSUB 32000: HOME : GOSUB 24000: PRINT : PRINT
33070 PRINT "Factors of ";A,"Factors of ";C
33080 PRINT
33090 G = K: IF L >K THEN G = L
33100 FOR X = 1 TO G
33110 IF A1(X) < >0 AND C1(X) < >0 THEN PRINT A1(X);", ";A2(X),C1(X);", ";C2(X)
33120 IF A1(X) < >0 AND C1(X) = O THEN PRINT A1(X);", ";A2(X)
33130 IF A1(X) = 0 AND C1(X) < >0 THEN PRINT ,C1(X);", ";C2(X)
33140 NEXT X
33150 RETURN :<CTRL-J>
34000 REM
34010 REM *** USER INPUT SOLUTION ***
34020 REM
34030 PRINT : PRINT "Can you find a combination of these": PRINT : PRINT "factor pairs that works (Y/N)? ";: GET ANS$: GOSUB 35000
34040 IF ANS$ = "N" OR ANS$ = "n" THEN 34190
34050 IF ANS$ < >"N" AND ANS$ < >"n" AND ANS$ < >"Y" AND ANS$ < >"y" THEN PRINT : GOTO 34030
34060 PRINT : IF GCD < >1 THEN PRINT GCD;
34070 PRINT "(";: INVERSE : PRINT "J";: NORMAL : PRINT "x + ";: INVERSE : PRINT "K";: NORMAL : PRINT ")(";: INVERSE : PRINT "L";: NORMAL : PRINT "x + ";: INVERSE : PRINT "M";: NORMAL : PRINT ")"
34080 PRINT : PRINT "You must tell me the values"
34090 PRINT "for J, K, L, and M."
34100 PRINT : INPUT "What is the value for J? ";J
34110 INPUT "What is the value for K? ";K
34120 INPUT "What is the value for L? ";L
34130 INPUT "What is the value for M? ";M
34140 IF (J = F1 AND K = F2 AND L = F3 AND M = F4) OR (J = F3 AND K = F4 AND L = F1 AND M = F2) THEN PRINT : PRINT "That's correct!": RETURN
34150 PRINT : PRINT "That's not quite correct."
34160 PRINT "Want to try again (Y/N)? ";: GET ANS$
34170 IF ANS$ = "Y" OR ANS$ = "y" THEN PRINT : GOTO 34060
34180 IF ANS$ < >"N" AND ANS$ < >"n" THEN 34160
34190 PRINT : PRINT "Press any key to see factored form.";: GET G$
34200 RETURN :<CTRL-J>
35000 REM
35010 REM *** FINISH ANSWER ***
35020 REM
35030 IF ANS$ = "Y" OR ANS$ = "y" THEN PRINT "Yes"
35040 IF ANS$ = "N" OR ANS$ = "n" THEN PRINT "No"
35050 RETURN :<CTRL-J>
36000 REM
36010 REM *** FIND COMMON INTEGRAL FACTOR ***
36020 REM *** USING EUCLIDEAN ALGORITHM ***
36030 REM
36040 Q = INT(A1/B1): REM DIVIDE A1 BY B1
36050 R = A1 -Q *B1: REM REMAINDER
36060 IF R = 0 THEN 36090: REM ALGORITHM FINISHED, GCD IS B1
36070 REM IF R<>0, MUST DO ANOTHER DIVISION
36080 A1 = B1:B1 = R: GOTO 36040
36090 RETURN :<CTRL-J>
37000 REM
37010 REM *** COMPUTER OR USER GENERATED PROB ***
37020 REM
37030 HOME
37040 VTAB 10
37050 HTAB 5
37060 PRINT "Who should make up the problem?"
37070 PRINT : PRINT
37080 HTAB 10: PRINT "(1) You"
37090 PRINT : HTAB 10: PRINT "(2) Computer"
37100 VTAB 20
37110 HTAB 5
37120 PRINT "Your choice (1 or 2)? ";
37130 GET PR$: IF PR$ < >"1" AND PR$ < >"2" THEN 37030
37140 IF PR$ = "1" THEN 37300
37150 PRV = CH
37160 HOME
37170 VTAB 3: HTAB 12: PRINT "Difficulty Level"
37180 PRINT : PRINT
37190 HTAB 5: PRINT "(1) Quadratic coefficient = 1"
37200 HTAB 10: PRINT "Constant term is positive"
37210 PRINT : HTAB 5: PRINT "(2) Quadratic coefficient = 1"
37220 HTAB 10: PRINT "Constant term is negative"
37230 PRINT : HTAB 5: PRINT "(3) Quadratic coefficient is an"
37240 HTAB 10: PRINT "integer greater than 1"
37250 PRINT : HTAB 5: PRINT "(4) Quadratic coefficient is an
37260 HTAB 10: PRINT "integer less than 0"
37270 VTAB 20: HTAB 5: PRINT "Your choice (1, 2, 3, or 4)? ";
37280 GET CH: IF CH <1 OR CH >4 OR CH < > INT(CH) THEN 37160
37290 IF PRV = CH THEN DT$ = "OLD"
37300 RETURN :<CTRL-J>
38000 REM
38010 REM DATA FOR COMPUTER GENERATED PROBS
38020 REM
38030 REM
38040 REM DIFFICULTY LEVEL 1
38050 DATA DL1
38060 DATA 1,6,5,1,-4,3,1,9,18,1,-11,28,1,-13,42
38070 DATA 1,-17,50,1,16,55,1,-17,72,1,-12,20,1,-12,35
38080 DATA 0,0,0
38090 REM
38100 REM DIFFICULTY LEVEL 2
38110 DATA DL2
38120 DATA 1,4,-5,1,-5,-6,1,-11,-10,1,-6,-18,1,2,-35
38130 DATA 1,5,-36,1,-4,-21,1,-5,-30,1,-1,-30,1,-5,-50
38140 DATA 0,0,0
38150 REM
38160 REM DIFFICULTY LEVEL 3
38170 DATA DL3
38180 DATA 2,5,3,5,6,1,7,-8,1,5,-16,3,3,-5,1
38190 DATA 2,-1,-6,8,-1,-9,7,19,-6,6,-1,-3,2,-1,-10
38200 DATA 0,0,0
38210 REM
38220 REM DIFFICULTY LEVEL 4
38230 DATA DL4
38240 DATA -2,-7,-3,-8,-6,-1,-14,9,-1,-7,18,-8,-3,-1,2
38250 DATA -3,-2,5,-9,-3,2,-3,7,-6,-2,3,10,-4,-23,6
38260 DATA 0,0,0